<?php
namespace app\admin\model\logic;

use think\Model;

class AdminRole extends Model
{

    //逻辑层user模型初始化存储层方法
    public function __construct()
    {
        $this->role= app('app\admin\model\db\AdminRole');
        $this->action = app('app\admin\model\logic\AdminAction');
        $this->auth_logic = app('app\admin\model\logic\AdminAuth');
        $this->admin = app('app\admin\model\logic\Admin');
    }
    //获取角色列表
    public function get_role_list()
    {
        $where=['add_time'=>['gt',0]];
        $rs_list=$this->role->get_list($where);
        foreach($rs_list as &$ve){
            $ve=$ve->toArray();
        }
        if(empty($rs_list)){
            $rs_arr['code']=0;
        }else{
            $rs_arr['code']=1;
            $rs_arr['data']=$rs_list;
        }
        return $rs_arr;
    }
    //生成角色无限级列表
    public function generate_role_list()
    {

        $rs_role_list=$this->get_role_list();
        if($rs_role_list['code']==0){
            $rs_arr['code']=0;
            $rs_arr['data']='';
        }else{
            foreach ($rs_role_list['data'] as $r) {
                $r['id']=$r['id'];
                $r['parentid']=$r['parent_id'];
                $r['add_time']=$r['add_time'];
                $r['quanxian']=url('authority',['id'=>$r['id']]);
                $array[] = $r;
            }
            $str = "<tr >
                        <td><input name='chk_list' type='checkbox' value='\$id' /></td>
                        <td style='padding-left:30px; text-align: left;'>\$id</td>
                        <td style='padding-left:30px; text-align: left;'>\$spacer \$role_name</td>
                        <td > \$add_time</td>
                        <td><a href='\$quanxian'>权限管理</a></td>
                    </tr>";
            $rs_arr['code']=1;
            $rs_arr['data']=generate_tree($array,$str);
        }
        return  $rs_arr;
    }
    //生成角色下拉
    public function generate_role_option($pareng_id=0)
    {
        $rs_role_list=$this->get_role_list();
        if($rs_role_list['code']==0){
            $rs_arr['code']=0;
        }else{
            foreach ($rs_role_list['data'] as $r) {
                $r['id']=$r['id'];
                $r['parentid']=$r['parent_id'];
                $r['selected']=$pareng_id==$r['id']?'selected':'';
                $array[] = $r;
            }
            $str = "<option value='\$id' \$selected>\$spacer\$role_name</option>";
            $rs_arr['code']=1;
            $rs_arr['data']=generate_tree($array,$str);
        }
        return  $rs_arr;
    }
    //保存角色添加
    public function role_save_add()
    {
        $post_data=input();
        $validate=validate('role');
        if($validate->scene('add')->check($post_data)){
            $in_data['role_name']=$post_data['role_name'];
            $in_data['parent_id']=$post_data['parent_id'];
            $in_data['add_time']=time();
            $rs_st=$this->role->insert_data($in_data);
            if($rs_st!=false){
                $rs_arr['code']=1;
                $rs_arr['msg']='添加成功';
            }else{
                $rs_arr['code']=0;
                $rs_arr['msg']='添加失败';
            }
        }else{
            $rs_arr['code']=0;
            $rs_arr['msg']=$validate->getError();
        }
        return $rs_arr;
    }
    //删除角色
    public function role_save_del(){
        $post_data=input();
        $validate=validate('role');
        if($validate->scene('del')->check($post_data)){
            foreach(json_decode($post_data['id_list'],true) as $ve){
                //根据角色ID 查询该角色下是否有管理员 没有管理员才能删除
                $rs_admin_st=$this->admin->get_role_admin($ve);
                if($rs_admin_st['code']==1){
                    $rs_st=$this->role->where(['id'=>['in',json_decode($post_data['id_list'],true)]]) -> delete();
                    //删除角色 就删除角色的所有权限
                    model('logic.admin_auth')->role_del($ve);
                }
            }
            $rs_arr['code']=1;
            $rs_arr['msg']='删除成功';
        }else{
            $rs_arr['code']=0;
            $rs_arr['msg']=$validate->getError();
        }
        return $rs_arr;
    }
    //获取一行角色信息
    public function get_role_row(){
        $post_data=input();
        $validate=validate('role');
        if($validate->scene('action')->check($post_data)){
            $rs_row=$this->role->get_row($post_data);
            if(empty($rs_row)){
                $rs_arr['code']=0;
                $rs_arr['msg']='获取信息失败';
            }else{
                $rs_arr['code']=1;
                $rs_arr['data']=$rs_row;
            }
        }else{
            $rs_arr['code']=0;
            $rs_arr['msg']=$validate->getError();
        }
        return  $rs_arr;
    }
    /****************************************角色授权*************************************************************** */
    //为授权生成授权菜单列表
    public function generate_action_list()
    {
        $post_data=input();
        $validate=validate('role');
        if($validate->scene('action')->check($post_data)){
            $rs_act_list=$this->action->get_action_list();
            foreach ($rs_act_list['data'] as $r) {
                $is_auth=$this->auth_logic-> auth_check($post_data['id'],$r['id']);
                $r['id']=$r['id'];
                $r['checked']=$is_auth['code']==1?'checked':'';
                $r['parentid']=$r['parent_id'];
                $r['add_url']=url('add',['id'=>$r['id'],'nav'=>'添加子菜单']);
                $r['url']=url('edit',['id'=>$r['id'],'nav'=>'编辑菜单']);
                $array[] = $r;
            }
            $str = "<tr >
                        <td><input name='chk_list' type='checkbox' value='\$id' \$checked /></td>
                        <td style='padding-left:30px; text-align: left;'>\$spacer \$name</td>
                        <td > \$controller</td>
                        <td > \$action</td>
                    </tr>";
            $rs_arr['code']=1;
            $rs_arr['data']=generate_tree($array,$str);
        }else{
            $rs_arr['code']=0;
            $rs_arr['msg']=$validate->getError();
        }
        return  $rs_arr;
    }
}